package com.gjp.controller;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.gjp.entity.User;
import com.gjp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

/**
 * Created by gjp on 2017-6-2.
 */
@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 添加 或 更新一个用户
     */
    @PostMapping("/save")
    public String add(User user) {
        if (userService.insertOrUpdate(user)){
            return "添加成功";
        }
        return "添加失败";
    }

    /**
     * 删除一个用户
     */
    @GetMapping("/delete/{id}")
    public String delete(@PathVariable("id") Long id){
        boolean b = userService.delete(
                new EntityWrapper<User>()
                        .eq("id", id)
        );
        if (b){
            return "删除成功";
        }
        return "删除失败";
    }

    /**
     * 查询所有用户
     */
    @GetMapping("/list")
    public List<User> findAll() {
        return userService.selectList(null);
    }

    /**
     * 根据ID查询用户
     * @param id
     * @return
     */
    @GetMapping("/id/{id}")
    public User findOne(@PathVariable("id") Integer id) {
        //这两句相等
        /*userService.selectOne(
                new EntityWrapper<User>().
                eq("id",id)
        );*/
        return userService.selectById(id);
    }

    /**
     * 分页查询
     * @param page
     * @return
     */
    @GetMapping("/page/{page}")
    public Page<User> findByPage(@PathVariable("page") Integer page) {
        Page<User> userPage = userService.selectPage(
                new Page<>(page, 10),
                //此处的wrapper 如果不需要传入查询条件，就置空，有查询条件就这样写
               /* new EntityWrapper<User>()
                .eq("name","张三")
                .eq("role","管理员");*/
               // 上面这句话意思是分页查询第(变量page)页的10条数据，条件是name等于张三，role等于管理员
               // 当然还有一些条件方法，什么大于等于小于之类的，可以去Wrapper类里面去看源码
               // 推荐复杂一点的查询，自己写个sql语句
                null
        );
        return userPage;
    }

    @GetMapping("/test")
    public ModelAndView test(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("customer");
        return modelAndView;
    }

    @GetMapping("/hello1")
    public User hello1(){
        return userService.selectOneTest();
    }
    @GetMapping("/hello2")
    public List<User> hello2(){
        return userService.selectS();
    }
}
